/**
 * 工厂模式
 * 
 * 设计原则
 * - 构造函数和创建者分离
 * - 符合开放封闭原则（构造函数和工厂分离）
 */

 class Product{
     constructor(name) {
         this.name = name;
     }
     init() {
        alert(`${this.name} init`);
     }
     fn1() {
        alert('fn1');
     }
     fn2() {
        alert('fn2');
     }
 }

 class creator {
     create(name){
        return new Product(name);
     }
 }

 //测试
 let creator = new creator();
 let p = creator.create('P1');
 p.init();